PostgreSQL 服务器编程 超越简单函数
1 背景知识
1.1 使用运算符完成数据比较
对于更多复杂的任务,你可以自定义自己的FRUIT_QTY
数据类型和操作符,并从一种类型转换到另外一种类型,比如可以完成苹果与橘子的总价比对。
如下例所示,可以定义 QTY
字段表示水果的数量,假设一个橘子等于1.5
个苹果价格,然后把苹果转换为橘子总价,可以用来比较苹果与橘子的总价谁高谁低。
1.2 创建一个水果类型
CREATE TYPE FRUIT_QTY as (name text,qty int);
1.3 确认水果类型能够使用
SELECT '("APPLE",3)'::FRUIT_QTY;
1.4 创建函数
CREATE OR REPLACE FUNCTION fruit_qty_larger_than(left_fruit FRUIT_QTY,
right_fruit FRUIT_QTY)
RETURNS BOOL
AS
$
BEGIN
IF (left_fruit.name = 'APPLE' AND right_fruit.name = 'ORANGE')
THEN
RETURN left_fruit.qty > (1.5 * right_fruit.qty);
END IF;
IF (left_fruit = 'ORANGE' AND right_fruit.name = 'APPLE')
THEN
RETURN (1.5 * left_fruit.qty) > right_fruit.qty;
END IF;
RETURN left_fruit.qty > right_fruit.qty;
END ;
$
LANGUAGE plpgsql;
2 测试代码是否正确
SELECT fruit_qty_larger_thanFRUIT_QTY, '("ORANGE",2)'::FRUIT_QTY;
true
SELECT fruit_qty_larger_thanFRUIT_QTY, '("ORANGE",2)'::FRUIT_QTY;
false